package main

import (
	"web_app/conf/settings"
	"web_app/dao/mysql"
	"web_app/dao/redis"
	"web_app/logger"
	"web_app/routes"
	"web_app/tools/snowflake"
	"web_app/tools/validator"

	"go.uber.org/zap"

	"github.com/spf13/viper"
)

// go web开发通用的脚手架  https://github.com/Q1mi/bluebell/tree/master/bluebell_frontend
func main() {
	//1.加载配置
	if err := settings.Init(); err != nil {
		zap.L().Info("配置文件初始化", zap.Error(err))
		panic(err)
	}
	//2.初始化日志
	if err := logger.InitZap(); err != nil {
		zap.L().Info("日志初始化", zap.Error(err))
		panic(err)
	}
	defer zap.L().Sync()

	//加载雪花算法
	if err := snowflake.Init("2022-12-15", 5); err != nil {
		//fmt.Println(snowflake.GenID(), "雪花id:")
		zap.L().Info("雪花算法错误", zap.Error(err))
		panic(err)
	}

	//加载validator验证国际化中文
	if err := validator.InitTrans("zh"); err != nil {
		zap.L().Info("加载validator验证国际化中文", zap.Error(err))
		panic(err)
	}

	//3.初始化mysql
	if err := mysql.InitDB(); err != nil {
		zap.L().Info("mysql链接错误", zap.Error(err))
		panic(err)
	}
	//4.初始化redis
	if err := redis.InitRedis(); err != nil {
		zap.L().Info("redis链接错误", zap.Error(err))
		panic(err)
	}
	defer redis.Rdb.Close()
	//5.注册路由
	r := routes.RouteInit()
	//6.启动服务
	err := r.Run(":" + viper.GetString("app.port"))
	if err != nil {
		panic(err)
	}
}
